package cn.lyjuan.archetypes.bms.web.taglib;

import cn.lyjuan.archetypes.bms.web.property.SysProperties;

import javax.servlet.jsp.JspException;
import java.io.IOException;

public class BmsStyleTag extends BaseTag
{
    private String file;

    /**
     * CDN启用标志，默认启用CDN
     */
    private boolean isCDN = true;

    /**
     * 获取资源服务器访问地址
     * @param isCDN     true使用CDN地址，false直接访问
     * @return
     */
    public static String getStyle(boolean isCDN)
    {
        return isCDN ? sysProperties().getStyleCDNUrl() : sysProperties().getStyleUrl();
    }

    /**
     * 将文件通过资源服务器访问
     * @param file
     * @param isCDN     true使用CDN地址，false直接访问
     * @return
     */
    public static String style(String file, boolean isCDN)
    {
        if (null == file || "" == file.trim())
            return "";

        SysProperties pro = sysProperties();

        // 拼接URL
        String url = pro.getStyleCDNUrl();
        if (!isCDN || null == url || "" == url.trim())// 如果关闭CDN，或CDN地址为空
            url = pro.getStyleUrl();// 使用非CDN地址

        if (isUrl(url))
        {
            boolean urlEnd = url.endsWith("/");
            boolean fileStart = file.startsWith("/");

            if (urlEnd && fileStart)// 两个URL都有 / ，拼接时去掉一个
                url += file.substring(1);
            else if (!urlEnd && !fileStart)// 两个URL都没有 /，加一个
                url += "/" + file;
            else// 一个有，一个没有，直接拼接
                url += file;
        } else// 如果配置的URL无效，则直接使用 file
            url = file;

        return url;
    }

    @Override
    public int doStartTag() throws JspException
    {
        String url = style(file, isCDN);

        try
        {
            this.pageContext.getOut().print(url);
        } catch (IOException e)
        {
            throw new JspException("Print BmsStyleTag Error", e);
        }

        return EVAL_PAGE;
    }

    /**
     * 是否为正确URL地址
     * @param url
     * @return
     */
    private static boolean isUrl(String url)
    {
        if (null == url || "" == url.trim())
            return false;

        if (url.startsWith("http://") || url.startsWith("https://"))
            return true;

        return false;
    }

    @Override
    public int doEndTag() throws JspException
    {
        return EVAL_PAGE;
    }

    public String getFile()
    {
        return file;
    }

    public void setFile(String file)
    {
        this.file = file;
    }

    public boolean isCDN()
    {
        return isCDN;
    }

    public void setCDN(boolean CDN)
    {
        isCDN = CDN;
    }
}
